package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;





import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.common.IObserver;
import pe.com.cotelasa.scp.controlador.backingBean.BKFacturasPorPagar;
import pe.com.cotelasa.scp.dominio.common.URLPaginacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioCompraFacturacion;
import pe.com.cotelasa.scp.dominio.service.IServicioProveedor;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoMoneda;
import pe.com.cotelasa.scp.entidad.CompraFacturacion;
import pe.com.cotelasa.scp.entidad.Proveedor;
import pe.com.cotelasa.scp.entidad.TipoMoneda;

@Named(value = "MBFacturasPagar")
@Scope("request")
public class MBFacturasPagar extends MBGenerico implements IMantenedor,IObserver, Serializable{
 
	private static final long serialVersionUID = -5422646024487446579L;
	private static Logger logger = Logger.getLogger(MBFacturasPagar.class);
	
	@Inject
	private BKFacturasPorPagar bkFacturasPorPagar;

	@Inject
	private IServicioTipoMoneda servicioTipoMoneda;
	
	@Inject
	private IServicioProveedor servicioProveedor;
	
    @Inject
    private MBComponenteFindProveedor mbComponenteFindProveedor;
    
    @Inject
    private IServicioCompraFacturacion servicioCompraFacturacion;
	
	public String mostrar(){
		try{
			mbComponenteFindProveedor.addObserver(this);
			this.bkFacturasPorPagar.setProveedorSeleccionado(new Proveedor());
			this.bkFacturasPorPagar.setTipoMonedaSeleccionado(new TipoMoneda(0));
			List<SelectItem> comboTipoMonedasBusqueda = new ArrayList<SelectItem>();
			Collection<TipoMoneda> collectionTipoMoneda = servicioTipoMoneda.listarTipoMonedasActivos();
			comboTipoMonedasBusqueda.add(new SelectItem(0,"TODOS"));
			for (TipoMoneda tipoMoneda : collectionTipoMoneda) {
				comboTipoMonedasBusqueda.add(new SelectItem(tipoMoneda.getId(),tipoMoneda.getNombre()));
			}
			this.bkFacturasPorPagar.setComboTipoMonedasBusqueda(comboTipoMonedasBusqueda);
			this.bkFacturasPorPagar.setListaFacturasPorPagar(new ArrayList<CompraFacturacion>());
			this.bkFacturasPorPagar.setFechaCancelacion(new Date());
		}catch(Exception e){
			mostrarError(e.getMessage());
		}	
		return URLPaginacion.FacturaPorPagar.URL_FACTURA_POR_PAGAR;
	}
	
	@Override
	public void actualizarObservador(Object object) {
		if (object instanceof Proveedor) {
            try{
            Proveedor proveedor = servicioProveedor.conseguirProveedorPorId(((Proveedor) object).getId());
            bkFacturasPorPagar.setProveedorSeleccionado(proveedor);
            } catch (ServiceException e) {
                e.printStackTrace();
            }
        }
	}
	
	public void buscar(){
		logger.info("buscar");
		System.out.println("buscar");
		CompraFacturacion compraFacturacion = new CompraFacturacion();
		try{
			if(bkFacturasPorPagar.getTipoMonedaSeleccionado().getId() != 0){
				compraFacturacion.setIdTipoMoneda(bkFacturasPorPagar.getTipoMonedaSeleccionado());
			}
			if(bkFacturasPorPagar.getProveedorSeleccionado() != null && bkFacturasPorPagar.getProveedorSeleccionado().getId()!=null){
				compraFacturacion.setIdProveedor(bkFacturasPorPagar.getProveedorSeleccionado());
			}
			compraFacturacion.setNumeroFactura(bkFacturasPorPagar.getNumeroFactura());
			bkFacturasPorPagar.setListaFacturasPorPagar(new ArrayList<CompraFacturacion>(servicioCompraFacturacion.obtenerCompraFacturacion(compraFacturacion)));
		}catch(Exception e){
			e.printStackTrace();
			mostrarError(e.getMessage());
		}	
	}
	
	public void limpiar(){
		logger.info("limpiando...");
		this.bkFacturasPorPagar.getProveedorSeleccionado().setId(null);
		this.bkFacturasPorPagar.getProveedorSeleccionado().setRazonSocial("");
		this.bkFacturasPorPagar.getTipoMonedaSeleccionado().setId(0);
		this.bkFacturasPorPagar.setNumeroFactura("");
	}
	
	public void cancelacion(CompraFacturacion compraFacturacionSeleccionado){
		try{
			if(this.bkFacturasPorPagar.getFechaCancelacion()!=null){
				logger.info("cancelacion factura por pagar: " + compraFacturacionSeleccionado.getId());
				compraFacturacionSeleccionado.setFecCancelacion(this.bkFacturasPorPagar.getFechaCancelacion());
				servicioCompraFacturacion.cancelarFactura(compraFacturacionSeleccionado);
				mostrarMensaje("Se registro la cancelacion de la factura: " + compraFacturacionSeleccionado.getNumeroFactura());
				getRequestContext().addCallbackParam("bandGrabarCancelacionFP", true);
				String[]update = {"formBusquedaFacturaPagar:pnlListarFacturasPagar",":msgs"};
				updateComponente(update);
			}else{
				logger.info("error de validacion");
				mostrarWarning("Seleccione una fecha de cancelacion");
				getRequestContext().addCallbackParam("bandGrabarCancelacionFP", false);
				String[]update = {"formBusquedaFacturaPagar:msjPopupCancelacionFP"};
				updateComponente(update);
			}
			
			this.bkFacturasPorPagar.setFechaCancelacion(new Date());
		}catch(Exception e){
			mostrarError(e.getMessage());
		}	
	}
	
	@Override
	public String actualizar() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String guardar() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void eliminar(ActionEvent actionEvent) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String editar() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String nuevo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String ver() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String aceptar() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String retroceder() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String cancelar() {
		// TODO Auto-generated method stub
		return null;
	}

}
